/***************************************************************************
*   Copyleft 2008-2009 by												   *
*	 Iwanicki Krzysztof													   *
*   <gamma.mini.pw.edu.pl/~iwanickik>									   *
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
*   This program is distributed in the hope that it will be useful,       *
*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
*   GNU General Public License for more details.                          *
***************************************************************************/
#ifndef __VGLPAINTER_H__
#define __VGLPAINTER_H__

#include "./vPainter.h"
#include "../../Macros/vMemoryMacros.h"

namespace Vendetta {
	/**
	 *	OpenGL based 2D and 3D painter class.
	 *	@see vPainter
	 */
	class vGlPainter: public vPainter {

	public:

		vGlPainter();
		~vGlPainter();

	//	vVoid DrawText(const cFontHandler& fontHandler, const cString& text);
	//	vVoid DrawText(const cFontHandler& fontHandler, const cQueue<cString> &lines, const vInt lastLine, const vRectangle& rectangle, const cBool wrap = true, const cBool downToUp = true);
		vVoid DrawPoint(const vVector2D& coords) const;
		vVoid DrawPoint(const vVector3D& coords) const;
		vVoid DrawLine(const vVector2D& coordsA, const vVector2D& coordsB) const;
		vVoid DrawLine(const vVector3D& coordsA, const vVector3D& coordsB) const;
		vVoid DrawRectangle(const vRectangle& rectangle) const;
		vVoid DrawRectangle(const vRectangle& rectangle, const vRectangle& texCoords) const;
		vVoid DrawRectangleTexelly(const vRectangle& rectangle, const vRectangle& texCoords) const;
		vVoid DrawRectangle(const vVector2D& min, const vVector2D& max) const;
		vVoid DrawRectangle(const vVector2D& min, const vVector2D& max, const vVector2D& minTexCoords, const vVector2D& maxTexCoords) const;
		vVoid DrawRectangleStrip(const vRectangle& rectangle) const;
		vVoid DrawTriangle(const vVector2D& coordsA, const vVector2D& coordsB, const vVector2D& coordsC) const;
		vVoid DrawTriangle(const vVector3D& coordsA, const vVector3D& coordsB, const vVector3D& coordsC) const;
		vVoid DrawTriangle(const vVector2D& coordsA, const vVector2D& coordsB, const vVector2D& coordsC, const vVector2D& texCoordsA, const vVector2D& texCoordsB, const vVector2D& texCoordsC) const;
		vVoid DrawTriangle(const vVector3D& coordsA, const vVector3D& coordsB, const vVector3D& coordsC, const vVector2D& texCoordsA, const vVector2D& texCoordsB, const vVector2D& texCoordsC) const;
		vVoid DrawTriangleStrip(const vVector2D& coordsA, const vVector2D& coordsB, const vVector2D& coordsC) const;
		vVoid DrawTriangleStrip(const vVector3D& coordsA, const vVector3D& coordsB, const vVector3D& coordsC) const;
		vVoid DrawQuad(const vVector2D& coordsA, const vVector2D& coordsB, const vVector2D& coordsC, const vVector2D& coordsD) const;
		vVoid DrawQuad(const vVector3D& coordsA, const vVector3D& coordsB, const vVector3D& coordsC, const vVector3D& coordsD) const;
		vVoid DrawQuad(const vVector2D& coordsA, const vVector2D& coordsB, const vVector2D& coordsC, const vVector2D& coordsD, const vVector2D& texCoordsA, const vVector2D& texCoordsB, const vVector2D& texCoordsC, const vVector2D& texCoordsD) const;
		vVoid DrawQuad(const vVector3D& coordsA, const vVector3D& coordsB, const vVector3D& coordsC, const vVector3D& coordsD, const vVector2D& texCoordsA, const vVector2D& texCoordsB, const vVector2D& texCoordsC, const vVector2D& texCoordsD) const;
		vVoid DrawQuadStrip(const vVector2D& coordsA, const vVector2D& coordsB, const vVector2D& coordsC, const vVector2D& coordsD) const;
		vVoid DrawQuadStrip(const vVector3D& coordsA, const vVector3D& coordsB, const vVector3D& coordsC, const vVector3D& coordsD) const;
		vVoid DrawPolygon(const vArray<vVector2D>& coords) const;
		vVoid DrawPolygon(const vArray<vVector3D>& coords) const;
		vVoid DrawPolygon(const vArray<vVector2D>& coords, const vArray<vVector2D>& texCoords) const;
		vVoid DrawPolygon(const vArray<vVector2D>& coords, const vArray<vVector2D>& texCoords, const vArray<vColor>& colors) const;
		vVoid DrawPolygonWithColors(const vArray<vVector2D>& coords, const vArray<vColor>& colors) const;
		vVoid DrawPolygon(const vArray<vVector3D>& coords, const vArray<vVector2D>& texCoords) const;

	};
}

#endif //__VGLPAINTER_H__